﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using BackusEntity;
using Backus.Log;
using BackusEntity.BE;

namespace Backus.Data
{
    public class ProcesoDAO
    {
        SqlConnection conexion;
        SqlDataAdapter comando;
        SqlCommand cmd;
        String errores;
        Conexion cn = new Conexion();

        LogManager logManager = new LogManager(System.Configuration.ConfigurationManager.AppSettings["LOG_FILE"].ToString());

        public DataSet obtenerProcesos()
        {
            DataSet ds = new DataSet();
            try
            {
                conexion = cn.Conectar();
                comando = new SqlDataAdapter("usp_ObtenerProcesos", conexion);
                comando.SelectCommand.CommandType = CommandType.StoredProcedure;
                comando.Fill(ds, "Procesos");
            }
            catch (Exception ex)
            {
                errores = ex.Message;
                LogInfo oLogInfo = new LogInfo();
                oLogInfo.Descripcion = "ProcesoDAO " + ex.Message;
                oLogInfo.FechaHora = DateTime.Now;
                oLogInfo.NombreProceso = "obtenerProcesos()";
                logManager.FileLog(oLogInfo);
            }
            finally
            {
                conexion.Dispose();
                comando.Dispose();
                ds.Dispose();
            }
            return ds;
        }

        public List<ProcesoBE> obtenerProcesoPorCodigo(int codigoProceso)
        {
            List<ProcesoBE> procesos = new List<ProcesoBE>();
            SqlDataReader dr = null;
            try
            {
                conexion = cn.Conectar();
                cmd = new SqlCommand("usp_ObtenerProcesoPorCodigo", conexion);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@idProceso", SqlDbType.Int));
                cmd.Parameters["@idProceso"].Direction = ParameterDirection.Input;
                cmd.Parameters["@idProceso"].Value = codigoProceso;

                dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    ProcesoBE proceso = new ProcesoBE();
                    if (dr[0].ToString() != null && dr[0].ToString().Trim().Length > 0)
                        proceso.idProceso = Convert.ToInt32(dr[0]);
                    if (dr[1].ToString() != null && dr[1].ToString().Trim().Length > 0)
                        proceso.nombreProceso = dr[1].ToString();
                    if (dr[2].ToString() != null && dr[2].ToString().Trim().Length > 0)
                        proceso.descripcionProceso = dr[2].ToString();
                    procesos.Add(proceso);
                }
            }
            catch (Exception ex)
            {
                errores = ex.Message;
                LogInfo oLogInfo = new LogInfo();
                oLogInfo.Descripcion = "ProcesoDAO " + ex.Message;
                oLogInfo.FechaHora = DateTime.Now;
                oLogInfo.NombreProceso = "obtenerProcesoPorCodigo()";
                logManager.FileLog(oLogInfo);
            }
            finally
            {
                conexion.Dispose();
                cmd.Dispose();
                dr.Close();
            }
            return procesos;
        }

        public DataSet obtenerSubProcesoPorProceso(int codigoProceso)
        {
            DataSet ds = new DataSet();
            try
            {
                conexion = cn.Conectar();
                comando = new SqlDataAdapter("usp_ObtenerSubProcesoPorProceso", conexion);
                comando.SelectCommand.CommandType = CommandType.StoredProcedure;
                comando.SelectCommand.Parameters.Add(new SqlParameter("@idProceso", SqlDbType.Int));
                comando.SelectCommand.Parameters["@idProceso"].Direction = ParameterDirection.Input;
                comando.SelectCommand.Parameters["@idProceso"].Value = codigoProceso;
                comando.Fill(ds, "SubProcesos");
            }
            catch (Exception ex)
            {
                errores = ex.Message;
                LogInfo oLogInfo = new LogInfo();
                oLogInfo.Descripcion = "ProcesoDAO " + ex.Message;
                oLogInfo.FechaHora = DateTime.Now;
                oLogInfo.NombreProceso = "obtenerSubProcesoPorProceso()";
                logManager.FileLog(oLogInfo);
            }
            finally
            {
                conexion.Dispose();
                comando.Dispose();
                ds.Dispose();
            }
            return ds;
        }

        public List<SubProcesoBE> obtenerSubProcesoPorCodigo(int codigoSubProceso)
        {
            List<SubProcesoBE> subProcesos = new List<SubProcesoBE>();
            SqlDataReader dr = null;
            try
            {
                conexion = cn.Conectar();
                cmd = new SqlCommand("usp_ObtenerSubProcesoPorCodigo", conexion);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@idSubProceso", SqlDbType.VarChar));
                cmd.Parameters["@idSubProceso"].Direction = ParameterDirection.Input;
                cmd.Parameters["@idSubProceso"].Value = codigoSubProceso;

                dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    SubProcesoBE subProceso = new SubProcesoBE();
                    if (dr[0].ToString() != null && dr[0].ToString().Trim().Length > 0)
                        subProceso.idSubProceso = Convert.ToInt32(dr[0]);
                    if (dr[1].ToString() != null && dr[1].ToString().Trim().Length > 0)
                        subProceso.nombreSubProceso = dr[1].ToString();
                    if (dr[2].ToString() != null && dr[2].ToString().Trim().Length > 0)
                        subProceso.idProceso = Convert.ToInt32(dr[2]);
                    subProcesos.Add(subProceso);
                }
            }
            catch (Exception ex)
            {
                errores = ex.Message;
                LogInfo oLogInfo = new LogInfo();
                oLogInfo.Descripcion = "ProcesoDAO " + ex.Message;
                oLogInfo.FechaHora = DateTime.Now;
                oLogInfo.NombreProceso = "obtenerSubProcesoPorCodigo()";
                logManager.FileLog(oLogInfo);
            }
            finally
            {
                conexion.Dispose();
                cmd.Dispose();
                dr.Close();
            }
            return subProcesos;
        }
    }
}
